//: [Previous](@previous)

/*:
 #### 内存访问性质
 * 内存访问冲突时，要考虑内存访问上下文中的这三个性质：访问是读还是写，访问的时长，以及被访问的存储地址。特别是，冲突会发生在当你有两个访问符合下列的情况：
 1. 至少有一个是写访问
 2. 它们访问的是同一个存储地址
 3. 它们的访问在时间线上部分重叠
 
 * 一个写访问会改变存储地址，而读操作不会。
 
 * 如果一个访问不可能在其访问期间被其它代码访问，那么就是一个瞬时访问。正常来说，两个瞬时访问是不可能同时发生的。
 
 * 一个长期访问可以被别的长期访问或瞬时访问重叠。
 
 * 重叠的访问主要出现在使用 in-out 参数的函数和方法或者结构体的 mutating 方法里。
 
 #### In-Out 参数的访问冲突
 
 * 一个函数会对它所有的 in-out 参数保持长期写访问。
 
 * 这种长期保持的写访问带来的问题是，你不能再访问以 in-out 形式传入的原始变量，即使作用域原则和访问权限允许——任何访问原始变量的行为都会造成冲突。
 
 * 长期写访问的存在还会造成另一种结果，往同一个函数的多个 in-out 参数里传入同一个变量也会产生冲突，
 
 #### 方法里 self 的访问冲突
 
 * 一个结构体的 mutating 方法会在调用期间对 self 进行写访问。
 
 #### 属性的访问冲突
 
 * 如结构体，元组和枚举的类型都是由多个独立的值组成的，例如结构体的属性或元组的元素。因为它们都是值类型，修改值的任何一部分都是对于整个值的修改，意味着其中一个属性的读或写访问都需要访问整一个值。
 
 * 在实践中，大多数对于结构体属性的访问都会安全的重叠。
 
 * 限制结构体属性的重叠访问对于保证内存安全不是必要的。
 
 * 你访问的是实例的存储属性，而不是计算属性或类的属性
 * 结构体是本地变量的值，而非全局变量
 * 结构体要么没有被闭包捕获，要么只被非逃逸闭包捕获了
 
 */

//: [Next](@next)
